/**
 * 
 */
package co.edu.udistrital.audiomixer.servicio;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.eclipse.emf.texo.server.store.BaseDao;
import org.eclipse.emf.texo.server.store.DaoRegistry;

import co.edu.udistrital.audiomixer.comun.IEntidad;

/**
 * @author edwin
 * 
 */
public abstract class ServicioAbstracto<T extends IEntidad> implements IServicio<T> {

	private BaseDao<T> baseDao;
	
	@PersistenceContext(unitName="MixerPU")
    private EntityManager manejadorEntidad;

	public BaseDao<T> getBaseDao() {

		if (baseDao == null) {
				baseDao = DaoRegistry.getInstance().getDaoForEntity(getClase());
		}
		return baseDao;
	}

	public void setBaseDao(BaseDao<T> baseDao) {
		this.baseDao = baseDao;
	}

	public T crear(T entidad) throws Exception {
		this.existe(entidad);
		entidad.setId(contar()+1);
		manejadorEntidad.persist(entidad);
		return entidad;
	}

	public T actualizar(T entidad) {
		entidad = manejadorEntidad.merge(entidad);
		return entidad;
	}

	public T eliminar(T entidad) {
		manejadorEntidad.remove(entidad);
		return entidad;
	}

	public List<T> consultar() {
		return getBaseDao().getAll();
	}

	public int contar() {
		return getBaseDao().countAll();
	}

}
